java使用Restcontroller将空值转换为空字符串
我在Spring中使用@RestController,我有以下响应:
{"name":"Khan","first":null,"last":null}
我希望null为""
(空字符串)
我不想做一些丑陋的事情,比如用空字符串初始化每个属性,如下所示:
@Transient private String first="";
@Transient private String last="";
我找到了一个讨论how to implement this solution "for Jackson < 2.0)"的链接,但我正在使用Jackson库>;2.0类似于:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.1</version>
</dependency>
此外,根据其他一些人的说法,链接中的解决方案并不总是有效
是否有一种优雅的方式将具有空值的字段转换为空字符串?最好有注释
# 1 楼答案
我认为@Raphael Amoedo走在了正确的轨道上,但我认为您问题的本质意味着解决方案将是使用
getFirst()
和getLast()
方法这确保了如果
first
和last
字段通过任何其他方式(可能是序列化)设置为null,则它们仍将返回空字符串而不是null值# 2 楼答案
我之前的回答是不可接受的,因为它不包括注释和序列化程序。因此,关于this链接(我通过搜索“jackson 2.0自定义序列化程序”在google上找到了该链接),我认为这应该是可行的(假设您的类是
Person
,因为它没有指定):然后在你的个人课上
我认为您应该重新评估为什么需要为此定制解析器,如果您继续阅读此答案顶部的整个链接,您将看到定制解析器的用例以及它与您的不同之处。在他的例子中,他希望返回一些与该字段没有直接关系的数据,而您只希望将
null
视为空字符串# 3 楼答案
您可以覆盖setFirst和setLast